#ifndef ANIMATION_H
#define ANIMATION_H

#include "lvgl/lvgl.h"
#include <stdio.h>
#include <stdbool.h>

// 动画状态标志
extern bool is_animating;         // 速度指针动画状态
extern bool is_rev_animating;     // 转速度指针动画状态
extern bool is_coolant_animating; // 冷却液温度指针动画状态
extern bool is_fuel_animating;    // 油耗指针动画状态

// 当前指针角度状态
extern int current_speed_angle;    // 速度指针当前角度
extern int current_rev_angle;      // 转速度指针当前角度
extern int current_coolant_angle;   // 冷却液温度指针当前角度
extern float current_fuel_angle;     // 油耗指针当前角度

// 上次记录值
extern int last_revspeed;          // 上次转速度值
extern int last_coolant_temp;       // 上次冷却液温度值
extern float last_fuel_consumption; // 上次油耗值

// 动画参数配置
#define BASE_ANIM_TIME 300         // 基础动画时间(ms)
#define ANGLE_TIME_RATIO 2         // 每度增加的动画时间(ms/度)
#define MIN_ANIM_TIME 300          // 最小动画时间(ms)
#define MAX_ANIM_TIME 1200         // 最大动画时间(ms)
#define DIRECT_SET_THRESHOLD 5     // 直接设置的角度阈值(度)

// 转速度指针参数配置
#define REV_BASE_ANGLE 146         // 每500转对应的角度(146度)
#define REV_BASE_TIME 500          // 基础动画时间(ms)
#define REV_MIN_ANGLE_CHANGE 5     // 最小角度变化(直接设置)

// 冷却液温度指针参数配置
#define COOLANT_MIN_ANGLE -570     // 最小角度(对应最高温度)
#define COOLANT_MAX_ANGLE -450     // 最大角度(对应最低温度)
#define COOLANT_TEMP_RANGE 120     // 温度范围0-120℃
#define COOLANT_ANGLE_RANGE 500    // 角度范围120度(-570 - (-450))
#define COOLANT_BASE_TIME 500      // 基础动画时间(ms)
#define COOLANT_MIN_ANGLE_CHANGE 2 // 最小角度变化(直接设置)

// 油耗指针参数配置
#define FUEL_MIN_ANGLE -950.0f     // 最小角度(对应最高油耗)
#define FUEL_MAX_ANGLE -75.0f      // 最大角度(对应最低油耗)
#define FUEL_CONSUMPTION_MIN 0.0f  // 最低油耗值(L/100km)
#define FUEL_CONSUMPTION_MAX 1.0f   // 最高油耗值(L/100km)
#define FUEL_ANGLE_RANGE 875.0f     // 角度范围(-75 - (-950))
#define FUEL_BASE_TIME 600          // 基础动画时间(ms)
#define FUEL_MIN_ANGLE_CHANGE 2.0f  // 最小角度变化(直接设置)
#define ANGLE_PER_STEP 52.0f        // 每0.1油耗变化对应的角度变化
#define STEP_ANIM_TIME 500          // 单步动画时间(ms)

/* 速度指针控制函数 */
void update_speed_pointer(int new_speed);
void init_speed_pointer(void);
static void speed_anim_ready_cb(lv_anim_t *a);

/* 转速度指针控制函数 */
void update_revspeed_pointer(int new_revspeed);
void init_revspeed_pointer(void);

/* 冷却液温度指针控制函数 */
void update_coolant_temp(int new_temp);
void init_coolant_pointer(void);

/* 油耗指针控制函数 */
void update_fuel_consumption(float new_consumption);
/* 初始化油耗指针 */
void init_fuel_pointer();

/* 动画完成回调函数 */
static void anim_ready_cb(lv_anim_t *a);

/* 转速度动画完成回调 */
static void rev_anim_ready_cb(lv_anim_t *a);

/* 冷却液温度动画完成回调 */
static void coolant_anim_ready_cb(lv_anim_t *a);

/* 油耗单步动画完成回调 */
static void fuel_anim_step_cb(lv_anim_t *a);

void update_fuel_consumption_async(void *param);

#endif // ANIMATION_H